# 类属性：就是类对象所拥有的属性，它被所有类对象的实例对象所共有，类对象和实例对象可以访问
# 实例属性：实例对象所拥有的属性，只能通过实例对象访问
class Student:
    school="德州学院"    #类属性
    def __init__(self,name,age):
        self.name=name   #实例属性
        self.age=age
        pass
    pass
xm=Student('小明',25)
# 类对象：Student     实例对象：通过类创建的实例对象称之为实例对象  如xm
# 类对象及实例对象都可以访问类属性
print("类对象访问类属性：{}".format(Student.school))
print("实例对象访问类属性:{}".format(xm.school))
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
# print("类对象访问实例属性：{}".format(Student.name)) #此种方式是错误的，类对象不能访问实例属性
print("实例对象访问实例属性：{}".format(xm.name))
xm.hobby="唱歌"    #添加实例属性
print(xm.hobby)
# print(Student.hobby)   #错误，类对象不能访问实例属性
# 如果需要在类外修改类属性，必须通过类对象去引用然后进行修改。如果通过实例对象去引用，
# 会产生一个同名的实例属性，这种方式修改的是实例属性，不会影响到类属性，
# 并且之后如果通过实例对象去引用该名称的属性，实例属性会强制屏蔽掉类属性，
# 即引用的是实例属性，除非删除了该实例属性
# xm.school="德州学院大数据专业"
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
# print("类对象访问类属性：{}".format(Student.school))
# print("实例对象访问类属性:{}".format(xm.school))
Student.school="德州学院数学与大数据方向"
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print("类对象访问类属性：{}".format(Student.school))
print("实例对象访问类属性:{}".format(xm.school))